package com.chongchong.online.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.chongchong.online.entity.constant.RuleType;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.chongchong.core.mp.annotation.RelationConstDict;
import com.chongchong.core.mp.annotation.RelationOneToOne;
import com.chongchong.core.mp.base.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Map;

/**
 * 在线表单数据表字段验证规则实体对象。
 *
 * @author Jerry
 * @date 2021-06-06
 */
@Data
@TableName(value = "wf_online_rule")
public class OnlineRule extends BaseEntity {

    /**
     * 主键Id。
     */
	@ApiModelProperty(value = "主键")
	@TableId(value = "rule_id", type = IdType.ASSIGN_ID)
	@JsonSerialize(using = ToStringSerializer.class)
    private Long ruleId;

    /**
     * 规则名称。
     */
    @TableField(value = "rule_name")
    private String ruleName;

    /**
     * 规则类型。
     */
    @TableField(value = "rule_type")
    private Integer ruleType;

    /**
     * 内置规则标记。
     */
    @TableField(value = "builtin")
    private Boolean builtin;

    /**
     * 自定义规则的正则表达式。
     */
    @TableField(value = "pattern")
    private String pattern;

	@TableField(value = "column_rule_id")
	private Long columnRuleId;

    /**
     * ruleId 的多对多关联表数据对象。
     */
	@RelationOneToOne(
		masterIdField = "columnRuleId",
		slaveServiceName = "onlineColumnRuleService",
		slaveModelClass = OnlineColumnRule.class,
		slaveIdField = "id")
    @TableField(exist = false)
    private OnlineColumnRule onlineColumnRule;

    @RelationConstDict(
            masterIdField = "ruleType",
            constantDictClass = RuleType.class)
    @TableField(exist = false)
    private Map<String, Object> ruleTypeDictMap;

//    @Mapper
//    public interface OnlineRuleModelMapper extends BaseMapper<OnlineRule> {
//        /**
//         * 转换Vo对象到实体对象。
//         *
//         * @param onlineRuleVo 域对象。
//         * @return 实体对象。
//         */
//        @Mapping(target = "onlineColumnRule", expression = "java(mapToBean(onlineRuleVo.getOnlineColumnRule(), OnlineColumnRule.class))")
//        OnlineRule toModel(OnlineRuleVo onlineRuleVo);
//        /**
//         * 转换实体对象到VO对象。
//         *
//         * @param onlineRule 实体对象。
//         * @return 域对象。
//         */
//        @Mapping(target = "onlineColumnRule", expression = "java(beanToMap(onlineRule.getOnlineColumnRule(), false))")
//        OnlineRuleVo fromModel(OnlineRule onlineRule);
//    }
//    public static final OnlineRuleModelMapper INSTANCE = Mappers.getMapper(OnlineRuleModelMapper.class);
}
